package beans;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import org.aspectj.runtime.internal.PerObjectMap;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
import com.sun.xml.internal.bind.v2.TODO;

import modelo.Criterio;
import modelo.Estado;
import modelo.Evaluacion;
import modelo.Perfil;
import modelo.Proyecto;
import modelo.Usuario;
import dao.EstadoDao;
import dao.EvaluacionDao;
import dao.PersonaDao;
import dao.ProyectoDao;
import dao.UsuarioDao;
import excepciones.DaoException;

@ManagedBean //(name = "LoginBean")
@RequestScoped
public class EvaluacionFormBean {
	
	@ManagedProperty(value="#{loginBean}")
	private LoginBean loginBean;
	
	@ManagedProperty(value="#{listProyectosBean}")
	private ListProyectosBean listProyectosBean;
	
	/*  Variables del proyecto */
	
	private Proyecto proyecto;
	private String coordinadores;
	private String areas;
	private String fecha;
	
	private String criterio1;
	//private int puntaje1;
	private String puntaje1;
	private SelectItem[] opciones1 = new SelectItem[]{new SelectItem("1", "1"),
	        new SelectItem("2", "2"),
	        new SelectItem("3", "3"),
	        new SelectItem("4", "4"),
	        new SelectItem("5", "5"),
	        new SelectItem("6", "6"),
	        new SelectItem("7", "7"),
	        new SelectItem("8", "8"),
	        new SelectItem("9", "9"),
	        new SelectItem("10", "10")};
	private String criterio2;
	private String puntaje2;
	private SelectItem[] opciones2 = new SelectItem[]{new SelectItem("1", "1"),
	        new SelectItem("2", "2"),
	        new SelectItem("3", "3"),
	        new SelectItem("4", "4"),
	        new SelectItem("5", "5")};
	private String criterio3;
	private String puntaje3;
	private SelectItem[] opciones3 = new SelectItem[]{new SelectItem("1", "1"),
	        new SelectItem("2", "2"),
	        new SelectItem("3", "3"),
			new SelectItem("4", "4"),
		    new SelectItem("5", "5"),
		    new SelectItem("6", "6"),
		    new SelectItem("7", "7"),
		    new SelectItem("8", "8"),
		    new SelectItem("9", "9"),
		    new SelectItem("10", "10")};
	private String criterio4;
	private String puntaje4;
	private SelectItem[] opciones4 = new SelectItem[]{new SelectItem("1", "1"),
	        new SelectItem("2", "2"),
	        new SelectItem("3", "3"),
	        new SelectItem("4", "4"),
	        new SelectItem("5", "5"),
	        new SelectItem("6", "6"),
	        new SelectItem("7", "7"),
	        new SelectItem("8", "8"),
	        new SelectItem("9", "9"),
	        new SelectItem("10", "10")};
	private String criterio5;
	private String puntaje5;
	private SelectItem[] opciones5 = new SelectItem[]{new SelectItem("1", "1"),
	        new SelectItem("2", "2"),
	        new SelectItem("3", "3"),
	        new SelectItem("4", "4"),
	        new SelectItem("5", "5")};
	
	public SelectItem[] getOpciones1() {
		return opciones1;
	}


	public void setOpciones1(SelectItem[] opciones1) {
		this.opciones1 = opciones1;
	}


	public void setPuntaje1(String puntaje1) {
		this.puntaje1 = puntaje1;		
	}


	public String getPuntaje1() {
		return puntaje1;
	}	
	
	
	public String getCriterio1() {
		return criterio1;
	}


	public void setCriterio1(String criterio1) {
		this.criterio1 = criterio1;
	}


	


	public String getCriterio2() {
		return criterio2;
	}


	public void setCriterio2(String criterio2) {
		this.criterio2 = criterio2;
	}


	public String getPuntaje2() {
		return puntaje2;
	}


	public void setPuntaje2(String puntaje2) {
		this.puntaje2 = puntaje2;
	}


	public String getCriterio3() {
		return criterio3;
	}


	public void setCriterio3(String criterio3) {
		this.criterio3 = criterio3;
	}


	public String getPuntaje3() {
		return puntaje3;
	}


	public void setPuntaje3(String puntaje3) {
		this.puntaje3 = puntaje3;
	}


	public String getCriterio4() {
		return criterio4;
	}


	public void setCriterio4(String criterio4) {
		this.criterio4 = criterio4;
	}


	public String getPuntaje4() {
		return puntaje4;
	}


	public void setPuntaje4(String puntaje4) {
		this.puntaje4 = puntaje4;
	}


	public String getCriterio5() {
		return criterio5;
	}


	public void setCriterio5(String criterio5) {
		this.criterio5 = criterio5;
	}


	public String getPuntaje5() {
		return puntaje5;
	}


	public void setPuntaje5(String puntaje5) {
		this.puntaje5 = puntaje5;
	}
	

	public EvaluacionFormBean(){
		
	}	

		
	@PostConstruct
	public void init(){
		Proyecto objProyecto = null;		
		
		ProyectoDao proyectoDao = new ProyectoDao();
		try {
			objProyecto = proyectoDao.findById(listProyectosBean.getSelected());
			this.coordinadores = objProyecto.getCoordinadoresToString();
			this.areas = objProyecto.getAreasTematicasToString();
			if(objProyecto.getMi_evaluacion() != null){
				//List <Criterio> criterios = (List<Criterio>) proyecto.getMi_evaluacion().getCriterios();
				this.criterio1 = objProyecto.getMi_evaluacion().getCriterioPorNombre("Pertenencia y Relevancia").getTexto();				
				this.puntaje1 = (new Integer(objProyecto.getMi_evaluacion().getCriterioPorNombre("Pertenencia y Relevancia").getPuntaje())).toString();
				this.criterio2 = objProyecto.getMi_evaluacion().getCriterioPorNombre("Recursos Humanos").getTexto();
				this.puntaje2 = (new Integer(objProyecto.getMi_evaluacion().getCriterioPorNombre("Recursos Humanos").getPuntaje())).toString();
				this.criterio3 = objProyecto.getMi_evaluacion().getCriterioPorNombre("Metodologia").getTexto();
				this.puntaje3 = (new Integer(objProyecto.getMi_evaluacion().getCriterioPorNombre("Metodologia").getPuntaje())).toString();
				this.criterio4 = objProyecto.getMi_evaluacion().getCriterioPorNombre("Resultados").getTexto();
				this.puntaje4 = (new Integer(objProyecto.getMi_evaluacion().getCriterioPorNombre("Resultados").getPuntaje())).toString();
				this.criterio5 = objProyecto.getMi_evaluacion().getCriterioPorNombre("Autoevaluacion").getTexto();
				this.puntaje5 = (new Integer(objProyecto.getMi_evaluacion().getCriterioPorNombre("Autoevaluacion").getPuntaje())).toString();
				
			}
			proyectoDao.closeEntityManager();
		} catch (DaoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}					
		
		
		
		this.setProyecto(objProyecto);
	}	
	

	public LoginBean getLoginBean() {
		return loginBean;
	}
	public void setLoginBean(LoginBean loginBean) {
		this.loginBean = loginBean;
	}


	public Proyecto getProyecto() {
		return proyecto;
	}


	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public String getCoordinadores() {		
		return coordinadores;
	}


	public void setCoordinadores(String coordinadores) {
		this.coordinadores = coordinadores;
	}


	public String getAreas() {
		return areas;
	}


	public void setAreas(String areas) {
		this.areas = areas;
	}


	public String getFecha() {
		Date date = Calendar.getInstance().getTime();
		//SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd.hhmmss");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		fecha =  sdf.format(date);
		return fecha;
	}


	public SelectItem[] getOpciones2() {
		return opciones2;
	}


	public void setOpciones2(SelectItem[] opciones2) {
		this.opciones2 = opciones2;
	}


	public SelectItem[] getOpciones3() {
		return opciones3;
	}


	public void setOpciones3(SelectItem[] opciones3) {
		this.opciones3 = opciones3;
	}


	public SelectItem[] getOpciones4() {
		return opciones4;
	}


	public void setOpciones4(SelectItem[] opciones4) {
		this.opciones4 = opciones4;
	}


	public SelectItem[] getOpciones5() {
		return opciones5;
	}


	public void setOpciones5(SelectItem[] opciones5) {
		this.opciones5 = opciones5;
	}


	public void setFecha(String fecha) {
		this.fecha = fecha;
	}
	
	public String cerrarEvaluacion(){
		ProyectoDao proyectoDao = new ProyectoDao(proyecto);			
		try {
							
			EstadoDao estadoDao = new EstadoDao();
			Estado evaluado = estadoDao.encontrarPorClave("evaluado");
			proyecto.setMi_estado(evaluado);
			proyectoDao.update();
			proyectoDao.closeEntityManager();
			
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
		this.listProyectosBean.setProyectos(null);
		this.listProyectosBean.setProyectos(loginBean.getObjPerfil().getMisProyectos(loginBean.getObjUsuario()));
		return "irListadoProyectosEvaluacion"; 
	}
	
	public String guardar(){
		
		//Chequeo si creo o edito la evaluacion
		if(this.proyecto.getMi_evaluacion() == null){			
		
			//CREO EVALUACION		
			try {
				Evaluacion evaluacion;
				evaluacion = new Evaluacion();
				
				//Guardo la fecha
				SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
				Date date = Calendar.getInstance().getTime();
				//SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd.hhmmss");
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				String strFecha =  sdf.format(date);
				//String strFecha = "2012-08-15" ;//this.fecha;
				Date objFecha = null;
				try {

				objFecha = formatoDelTexto.parse(strFecha);

				} catch (ParseException ex) {

					ex.printStackTrace();

				} catch (java.text.ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}				
				evaluacion.setFecha(objFecha);
				
				
				evaluacion.setUnUsuario(this.loginBean.getObjUsuario());
				
				//Criterios
				
				Criterio c1 = new Criterio();
				c1.setNombre("Pertenencia y Relevancia");
				c1.setPuntaje(new Integer(this.puntaje1));
				c1.setTexto(this.criterio1);
				
				Criterio c2 = new Criterio();
				c2.setNombre("Recursos Humanos");
				c2.setPuntaje(new Integer(this.puntaje2));
				c2.setTexto(this.criterio2);
				
				Criterio c3 = new Criterio();
				c3.setNombre("Metodologia");
				c3.setPuntaje(new Integer(this.puntaje3));
				c3.setTexto(this.criterio3);
				
				Criterio c4 = new Criterio();
				c4.setNombre("Resultados");
				c4.setPuntaje(new Integer(this.puntaje4));
				c4.setTexto(this.criterio4);
				
				Criterio c5 = new Criterio();
				c5.setNombre("Autoevaluacion");
				c5.setPuntaje(new Integer(this.puntaje5));
				c5.setTexto(this.criterio5);
				
				List<Criterio> listCriterios = new ArrayList<Criterio>();
				listCriterios.add(c1);				
				listCriterios.add(c2);
				listCriterios.add(c3);
				listCriterios.add(c4);
				listCriterios.add(c5);				
				evaluacion.setCriterios(listCriterios);
				
				
				EvaluacionDao evaluacionDao = new EvaluacionDao(evaluacion);
				evaluacionDao.create();
				
				proyecto.setMi_evaluacion(evaluacion);
				ProyectoDao proyectoDao = new ProyectoDao(proyecto);				
				proyectoDao.update();

				evaluacionDao.closeEntityManager();
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}else{
			//EDITO EVALUACION
			
			try {
				ProyectoDao proyectoDao = new ProyectoDao(proyecto);
				Proyecto objProyecto = proyectoDao.findById(listProyectosBean.getSelected());
				proyecto = objProyecto;
				proyecto.getMi_evaluacion().getCriterioPorNombre("Pertenencia y Relevancia").setTexto(this.criterio1);
				proyecto.getMi_evaluacion().getCriterioPorNombre("Pertenencia y Relevancia").setPuntaje((new Integer(this.puntaje1)).intValue());
				proyecto.getMi_evaluacion().getCriterioPorNombre("Recursos Humanos").setTexto(this.criterio2);
				proyecto.getMi_evaluacion().getCriterioPorNombre("Recursos Humanos").setPuntaje((new Integer(this.puntaje2)).intValue());
				proyecto.getMi_evaluacion().getCriterioPorNombre("Metodologia").setTexto(this.criterio3);
				proyecto.getMi_evaluacion().getCriterioPorNombre("Metodologia").setPuntaje((new Integer(this.puntaje3)).intValue());
				proyecto.getMi_evaluacion().getCriterioPorNombre("Resultados").setTexto(this.criterio4);
				proyecto.getMi_evaluacion().getCriterioPorNombre("Resultados").setPuntaje((new Integer(this.puntaje4)).intValue());
				proyecto.getMi_evaluacion().getCriterioPorNombre("Autoevaluacion").setTexto(this.criterio5);
				proyecto.getMi_evaluacion().getCriterioPorNombre("Autoevaluacion").setPuntaje((new Integer(this.puntaje5)).intValue());
				
				
				proyectoDao.update();
				proyectoDao.closeEntityManager();
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}		
		
//		listProyectosBean.setProyectos(loginBean.getObjPerfil().getMisProyectos(loginBean.getObjUsuario()));
//		proyectoDao.closeEntityManager();
//		return "irListadoProyectos";
		System.out.println("irListaProyectosEval");
		
		return "irListadoProyectosEvaluacion";
	}
	
	public String cancelar(){
		return "irListadoProyectosEvaluacion";
	}


	public ListProyectosBean getListProyectosBean() {
		return listProyectosBean;
	}


	public void setListProyectosBean(ListProyectosBean listProyectosBean) {
		this.listProyectosBean = listProyectosBean;
	}
	
	
}